// 封装一个函数 f  使 f 指向 oTarget
function bindThis(f, oTarget) {
  // this -->
  let oS = Symbol('f');
  oTarget[oS] = f;
  // 模拟bind
  return oTarget[oS];
}

//
// function cc(a, b) {
//   return
// }
//
// let obj = {a: 10, f: 20};
// obj[Symbol('f')] = '123';
// bindThis(cc, obj);


//


// 一个函数this指向谁 由函数的调用者决定
// es5的函数 : 谁调用就指向谁
// es6的箭头函数 : 指向上一级

// function aa() {
//   console.log(this); // obj
//   return this
// }
//
// const bb = () => {
//   // 箭头函数 没有上下文的作用域
//   // console.log(this); // window
//   function cc() {
//     console.log(this);
//     return this;
//   }
//   return cc();
// };
//
// let obj = {aa,bb};
//
//
// console.log(obj.aa() === obj.bb());
var r = function (a, b) {
  return this.test + a + b
};

function aa() {
  var r = bindThis(function (a, b) {
    console.log(this);
    return this.test + a + b
  }, {test: 2})(2, 3);
  console.log(r)
}

aa(2, 3)
// function aa() {
// var r = bindThis(function (a, b) {
//   return this.test + a + b
// }, {test: 2})(2, 3);
// return r === 7;
// }
